// 封装的是具体的接口请求方法
// 注意：每个接口方法只负责请求一个url地址
import request from '@/utils/request' // 引入自定义的axios函数
// import store from '@/store' // 引入store对象
// 1-registerAPI(this.form)相当于registerAPI({
//   username: '',
//   password: '',
//   repassword: ''
// },)
// 2-若形参是obj,则obj就相当于obj={ username: '',password: '',repassword: ''}
// 3-左侧想要对象的解构赋值 语法：{username:username变量名,password: 变量名,repassword: 变量名}={username: '',password: '值',repassword: ''}
// 4-函数形参的obj就改成对象解构接收传入的数据对象{username:username,password: password,repassword:repassword}
// 5-key是传入的对象的key匹配，value是变量名，用来接收外面传入的值
// 6-es6规定，当Key和value变量同名时，可以简写（key既为key也是value变量名）

/**
 * 注册接口
 * @param {*} param0{ username:用户名，password:密码,repasswore:确认密码}
 * @returns Promise对象
 */
// 导出接口方法 为了在逻辑页面引入后调用
export const registerAPI = ({ username, password, repassword }) => {
  // 原地是一个Promise对象（内部包含原生ajax请求）
  // return这个Promise对象到逻辑页面 去那边对Promise对象提取结果
  return request({
    url: 'api/reg',
    method: 'POST',
    // axios传参params;data
    // params的对象参数名和值。axios源码会把参数和值拼接在会url?给后台（query查询字符串）
    // data的对象参数名和值。axios源码会把参数和值拼接在请求体里(后台叫body参数)

    data: {
      // usename: usename,
      // password: password,
      // repassword: repassword
      username,
      password,
      repassword
    }
  })
}
/**
 *登录接口
 * @param {*} param0{usename:用户名，password:密码}
 * @returns Promise对象
 */
export const loginAPI = ({ username, password }) => {
  return request({
    url: '/api/login',
    method: 'POST',
    data: {
      username,
      password
    }
  })
}
// 获取用户信息接口
export const getUserInfoAPI = () => {
  return request({
    url: '/my/userinfo',
    method: 'GET' // method不写就是默认get请求
    // 传参给后台：params(传的是查询字符串query),data(传的是请求体)，headers(传的是请求头)
    // headers: {
    //   // this.$store.state.token这里this不是组件对象不能用this.$store拿到store对象
    //   Authorization: store.state.token
    // }

  })
}
// 获取侧边栏数据
export const getMenusListAPI = () => {
  return request({
    url: '/my/menus'
  })
}
// 请求更新个人中心基本资料的数据
export const updateUserInfoAPI = ({ username, id, nickname, email, user_pic }) => {
  return request({
    url: '/my/userinfo',
    method: 'PUT',
    data: {
      username,
      id,
      nickname,
      email,
      user_pic
    }

  })
}
// 请求更新个人中心头像的数据
export const updateUserAvatarAPI = avatar => {
  return request({
    url: '/my/update/avatar',
    method: 'PATCH',
    data: {
      avatar
    }
  })
}
// 请求更新个人中心重置密码的数据
export const updatePwdAPI = ({ old_pwd, new_pwd, re_pwd }) => {
  return request({
    url: '/my/updatepwd',
    method: 'PATCH',
    data: {
      old_pwd,
      new_pwd,
      re_pwd
    }
  })
}
// 请求文章分类列表的数据
export const getArtCateListAPI = () => {
  return request({
    url: '/my/cate/list'
  })
}
// 请求文章分类-添加分类数据
export const addArtCateAPI = ({ cate_name, cate_alias }) => {
  return request({
    url: '/my/cate/add',
    method: 'POST',
    data: {
      cate_name,
      cate_alias
    }
  })
}
// 请求文章分类-修改分类数据
export const updateArtCateAPI = ({ id, cate_name, cate_alias }) => {
  return request({
    url: '/my/cate/info',
    method: 'PUT',
    data: {
      id,
      cate_name,
      cate_alias
    }
  })
}
// 请求删除文章分类的数据
export const delArtCateAPI = id => {
  return request({
    url: 'my/cate/del',
    method: 'DELETE',
    params: {
      id
    }
  })
}
// 请求发布文章的数据
export const uploadArticleAPI = (fd) => {
  return request({
    url: 'my/article/add',
    method: 'POST',
    data: fd
    // {}如果是一个普通对象，axios会把它转成JSON字符串在请求体里交给后台
    // 这个接口文档要求请求体里是一个FormData类型（表单数据对象）携带文件给后台
  })
}
// 请求文章列表数据
export const getArticleListAPI = ({ pagenum, pagesize, cate_id, state }) => {
  return request({
    url: '/my/article/list',
    params: {
      pagenum, // 当前页码
      pagesize, // 当前页需要的数据条数
      cate_id, // 文章分类id
      state // 文章状态
    }
  })
}
// 请求文章详情数据
export const getArticleDetailAPI = (id) => {
  return request({
    url: '/my/article/info',
    params: {
      id
    }
  })
}
// 请求删除文章数据
export const delArticleAPI = (id) => {
  return request({
    url: '/my/article/info',
    method: 'DELETE',
    params: {
      id
    }
  })
}
